<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class cpListePages extends cpListe
{

	protected $params = array();
	protected $paramsCat = array();
	
	public $cat;
	
	# Filtres
	public $cat_id;
	public $rechercher;
	public $statut;
	
	# Liens
	public $module;
	public $lien_statut;
	public $lien_sort;
	public $lien_cat;
	public $lien_page;
	
	public function __construct($core, $params = array())
	{

		parent::__construct($core, 'pages');
		
		# Filtres
		$this->cat_id = 1;
		$this->rechercher = '';
		$this->statut = 'ignorer';
		
		# Paramètres initiaux
		$this->params = $params;
		
		# Liens
		$this->module		= 'pages';
		$this->lien_statut 	= 'index.php?module=pages&cat_id=%2$s&rechercher=%3$s&statut=%1$s';
		$this->lien_sort 	= 'index.php?module=pages&cat_id=%2$s&rechercher=%3$s&statut=%1$s&sort=%4$s';
		$this->lien_cat		= 'index.php?module=pages&cat_id=%1$s';
		$this->lien_page	= 'index.php?module=modifierPage&page_id=%1$s';
		
		# Initialiser les colonnes
		$this->initColonnes(array(
			'case'				=> array('&nbsp;'),
			'titre'				=> array(__('Titre'), array('P.page_titre ASC', 'cat_titre ASC'), array('P.page_titre DESC', 'cat_titre DESC')),
			'date_modification'	=> array(__('Date de modification'), array('P.page_date_modification ASC', 'cat_titre ASC'), array('P.page_date_modification DESC', 'cat_titre ASC')),
			'statut'			=> array(__('Statut'), array('P.page_statut ASC, P.page_modifiee ASC', 'cat_titre ASC'), array('P.page_statut DESC, P.page_modifiee DESC', 'cat_titre ASC'))
		), 'titre-asc');
		
		$ordreSQL = $this->getOrdreSQL();
		$this->params['order'] = $ordreSQL[0];
		$this->paramsCat['order'] = $ordreSQL[1];
		
	}
	
	public function filtres()
	{
		
		# rechercher: Recherche de pages par mots-clés
		if(!empty($_GET['rechercher'])) {
			$this->params['rechercher_admin'] = $this->rechercher = $_GET['rechercher'];
			$_GET['cat_id'] = 'ignorer';
		}
		
		# cat_id: Afficher les pages d'une catégorie en particulier
		if($_GET['cat_id'] == 'ignorer') {
			$this->cat_id = 'ignorer';
		}		
		elseif(empty($_GET['cat_id']) || is_numeric($_GET['cat_id'])) {
			
			if(empty($_GET['cat_id'])) {
				$_GET['cat_id'] = 1;
			}
			
			$catReq = $this->core->site->getCategories(array('cat_id' => (integer) $_GET['cat_id']), CP_GET_STATIC);
			
			if(!$catReq->isEmpty()) {
				$this->cat = $catReq;
				$this->cat_id = $_SESSION[CP_DERNIERE_CATEGORIE_AFFICHEE] = (integer) $_GET['cat_id'];
			}
		}
		
		# statut: Afficher les pages selon leur statut
		if($_GET['statut'] == 'brouillon') {
			$this->params['page_modifiee'] = CP_PAGEMODIFIEE_OUI;
			$this->statut = 'brouillon';
		} elseif($_GET['statut'] == 'online') {
			$this->params['page_statut'] = CP_STATUT_ONLINE;
			$this->statut = 'online';
		} elseif($_GET['statut'] == 'offline') {
			$this->params['page_statut'] = CP_STATUT_OFFLINE;
			$this->statut = 'offline';
		}
		
	}
	
	public function afficherFiltres()
	{
		
		$html=
		'<form id="filtres" class="filtres_tableau" action="index.php" method="GET">'.
		form::hidden('module', $this->module).
		'<p class="rechercher">'.
			form::field('rechercher', 30, 100, html::escapeHTML($this->rechercher)).
			'<input type="submit" value="'.__('Chercher dans les pages').'" />'.
		'</p>'.
		'<ul class="choix_horizontal">';
		
		$html.= ($this->statut != 'ignorer') ?
			'<li><a href="'.sprintf($this->lien_statut, 'ignorer', $this->cat_id, $this->rechercher).'">'.__('Tout').'</a> |</li>' :
			'<li>'.__('Tout').' |</li>';
			
		$html.= ($this->statut != 'online') ?
			'<li><a href="'.sprintf($this->lien_statut, 'online', $this->cat_id, $this->rechercher).'">'.__('En ligne').'</a> |</li>' :
			'<li>'.__('En ligne').' |</li>';
			
		$html.= ($this->statut != 'offline') ?
			'<li><a href="'.sprintf($this->lien_statut, 'offline', $this->cat_id, $this->rechercher).'">'.__('Hors ligne').'</a> |</li>' :
			'<li>'.__('Hors ligne').' |</li>';
			
		$html.= ($this->statut != 'brouillon') ?		
			'<li><a href="'.sprintf($this->lien_statut, 'brouillon', $this->cat_id, $this->rechercher).'">'.__('Brouillon').'</a></li>' :
			'<li>'.__('Brouillon').'</li>';
			
		$html.=
		'</ul>'.
		'</form>';
		
		return $html;
		
	}
	
	public function afficherListe($page,$nb_par_page,$enclose_block='')
	{

		$html_block = '';
		$empty = true;
		
		# -- Paramètres pour obtenir les catégories / pages de la DB --
		
		if(!$this->catContexte())
		{
			$counter = $this->getPages(CP_GET_COMPTEUR);
		
			if ($counter->f(0) == 0) {
				return '<div class="msg msgInfo">'.__('Pas de page').'</div>';
			}
			
			$pager = new pager($page,$counter->f(0),$nb_par_page,10);
			
			$affiche_cat = false;
			$affiche_pages = true;
			$this->params['limit'] = array($pager->index_start,$nb_par_page);
		
		}
		else
		{
			
			$html_block.=$this->arborescence();
			
			$counterCat = $this->getCategories(CP_GET_COMPTEUR);
			$counterPages = $this->getPages(CP_GET_COMPTEUR);
			
			if($counterCat->f(0) == 0 && $counterPages->f(0) == 0) {
				return $html_block.'<div class="msg msgInfo">'.__('Pas de page').'</div>';
			}
			
			$nb_elements = $counterCat->f(0) + $counterPages->f(0);
			$pager = new pager($page,$nb_elements,$nb_par_page,10);
			
			$page = abs((integer) $page);
			$nb_pages = ceil($nb_elements/$nb_par_page);			
			if ($page > $nb_pages || $page < 1) {
				$page = 1;
			}

			$this->paramsCat['limit'] = array($pager->index_start, $nb_par_page);
			
			$page_fin_cat = ceil($counterCat->f(0) / $nb_par_page);
			$page_fin_cat_nb_cat = $counterCat->f(0) % $nb_par_page;

			if($page == $page_fin_cat)
			{
				$this->params['limit'] = array($pager->index_start-$counterCat->f(0)+$page_fin_cat_nb_cat, $nb_par_page-$page_fin_cat_nb_cat);
				$affiche_cat = true;
				$affiche_pages = $this->params['limit'][0] < 0 ? false : true;
			}
			elseif($page < $page_fin_cat)
			{
				$affiche_cat = true;
				$affiche_pages = false;
			}
			else
			{
				$affiche_cat = false;
				$affiche_pages = true;
				$this->params['limit'] = array($pager->index_start-$counterCat->f(0), $nb_par_page);
			}
			
		}
		
		# -- Pager --
		$pager->var_page = 'page';
		$pager->html_prev = $this->html_prev;
		$pager->html_next = $this->html_next;

		# -- Lien pour ordonner les résultats --
		$lien_sort = sprintf($this->lien_sort, (integer) $this->statut, (integer) $this->cat_id, str_replace('%', '%%', urlencode($this->rechercher)), '%s');
		
		# -- Début: Affichage --
		$html_block .=
		'<table id="listePages">'.
		$this->getEnteteHTML($lien_sort, 'listePages_').
		'<tbody>'.
			'%s'.
		'</tbody>'.
		'</table>'.
		'<p class="options-liste">'.
			'<a href="#" id="selectionner_tout">'.__('sélectionner tout').'</a> - '.
			'<a href="#" id="inverser_selection">'.__('inverser la sélection').'</a>'.
		'</p>';
		
		if ($enclose_block) {
			$enclose = explode('%s', $enclose_block);
			$html_block = $enclose[0].$html_block.$enclose[1];
		}
		
		$blocks = explode('%s',$html_block);
			
		$html = $blocks[0];
		
		# Affichage des catégories
		if($affiche_cat)
		{
			
			$categories = $this->getCategories(CP_GET_STATIC);
			
			while($categories->fetch())
			{
				$html.=$this->ligneCategorie($categories);
			}
			
		}
		
		# Affichage des pages
		if($affiche_pages)
		{
			
			$pages = $this->getPages(CP_GET_RS);
			
			while($pages->fetch())
			{
				$html.=$this->lignePage($pages);
			}
			
		}
		
		$html.= 
			$blocks[1].
			'<p class="pages">'.__('Page(s) :').' '.$pager->getLinks().'</p>';
			
		return $html;
	
	}
	
	public function catContexte()
	{
		return is_object($this->cat);
	}
	
	public function arborescence()
	{
		
		$arborescence = $this->cat->getArborescence();
		$html = '<p class="arborescence">';
		
		foreach($arborescence as $k => $v)
		{
			$html.=
				'<a href="'.sprintf($this->lien_cat, (integer) $v->cat_id).'">'.
					$v->cat_titre.
				'</a>';	
		}
		
		$html.=
				'<a href="#" class="current">'.
					$this->cat->cat_titre.
				'</a>'.
			'</p>';
			
		return $html;		
	}
	
	public function getPages($type)
	{
		if(is_object($this->cat)) {
			return $this->cat->getPages($this->params, $type);
		}
		
		return $this->core->site->getPages($this->params, $type);
	}
	
	public function getCategories($type)
	{
		return $this->cat->getCategories($this->paramsCat, $type);
	}
	
	public function ligneCategorie($cat)
	{
		$checkboxDisabled =
			$this->core->auth->verifierPermission('supprimerCategorie') ?
						'' :
						'disabled="disabled"';
		
		return
		'<tr>'.
			'<td class="case">'.form::checkbox('selection_categories[]', $cat->cat_id, false, NULL, NULL, $checkboxDisabled).'</td>'.
			'<td class="titre"><a href="'.sprintf($this->lien_cat, (integer) $cat->cat_id).'" class="lienDossier">'.$cat->cat_titre.'</a></td>'.
			'<td class="date_modification">&nbsp;</td>'.
			'<td class="statut">&nbsp;</td>'.
		'</tr>';
	}
	
	public function lignePage($page)
	{

		$led = ($page->page_statut == CP_STATUT_OFFLINE) ?
			'<img src="images/16/rouge.png" alt="'.__('Hors ligne').'" title="'.__('Hors ligne').'" />' :
			'<img src="images/16/vert.png" alt="'.__('En ligne').'"  title="'.__('En ligne').'" />';

		if($page->page_modifiee == CP_PAGEMODIFIEE_OUI) {
			$led.= '<img src="images/16/jaune.png" alt="'.__('Brouillon').'" title="'.__('Brouillon').'" />';
		}
	
		$class = ($this->catContexte() && $page->page_id == $this->cat->home_page_id) ? 'lienAccueil' : 'lienPage';
	
		$checkboxDisabled =
			$this->core->auth->verifierPermission('toutesPages') ||
			$page->utilisateur_id == $this->core->auth->getUtilisateurID() ?
						'' : 'disabled="disabled"';
			
		return
		'<tr>'.
			'<td class="case">'.form::checkbox('selection_pages[]', (integer) $page->page_id, false, 'input_page', NULL, $checkboxDisabled).'</td>'.
			'<td class="titre"><a href="'.sprintf($this->lien_page, (integer) $page->page_id).'&ref=1" class="'.$class.'" page_id="'.(integer) $page->page_id.'">'.html::escapeHTML($page->page_titre).'</a></td>'.
			'<td class="date_modification">'.cpDt::belleDate(array(), strtotime($page->page_date_modification)).'</td>'.
			'<td class="statut">'.$led.'</td>'.
		'</tr>';
			
	}
	
	
}

?>